package iface.aplicativo.apresentacao.controle;

import iface.aplicativo.excecao.MensagemException;
import iface.aplicativo.negocio.aps.ManterItensMenuAPS;
import iface.aplicativo.negocio.entidade.Menu;
import iface.aplicativo.util.BeanAbstrato;
import iface.arquitetura.utilitario.ListaTO;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import org.primefaces.model.MenuModel;

@ManagedBean
@SessionScoped
public class ManterItensMenuBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 4285899560377776076L;

	private Menu itemMenu;
	private Menu itemMenuAux;

	@ManagedProperty(value = "#{manterItensMenuAPS}")
	private ManterItensMenuAPS service;

	public void setService(ManterItensMenuAPS service) {
		this.service = service;
	}

	public Collection<Menu> getTodosItensMenu() throws Exception {
		return this.service.getTodosItensMenu();
	}

	public MenuModel getMenuDinamico() throws Exception {
		return this.service.getMenuDinamico();
	}

	public void salvarItemMenu() throws Exception {

		try {
			String msg = this.service.salvarItemMenu(this.getItemMenu());
			this.limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public void excluirItemMenu() throws Exception {

		try {
			String msg = this.service.excluirItemMenu(this.getItemMenuAux());

			this.limparCampos();

			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		} catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		} catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}

	public Collection<ListaTO> getListaMenusRaiz() {
		return this.service.getListaMenusRaiz();
	}

	public Collection<Long> getListaNumeroPosicoes() {
		final List<Long> posicoes = new ArrayList<Long>();

		for (long i = 1; i <= 100; i++) {
			posicoes.add(i);
		}

		return posicoes;
	}

	public void limparCampos() {
		this.setItemMenu(null);
		this.setItemMenuAux(null);
	}

	public Menu getItemMenu() {
		if (itemMenu == null) {
			itemMenu = new Menu();
		}
		return itemMenu;
	}

	public void setItemMenu(Menu itemMenu) {
		this.itemMenu = itemMenu;
	}

	public Menu getItemMenuAux() {
		if (itemMenuAux == null) {
			itemMenuAux = new Menu();
		}
		return itemMenuAux;
	}

	public void setItemMenuAux(Menu itemMenuAux) {
		this.itemMenuAux = itemMenuAux;
	}

}
